#define ASMSTR(S) "\t" S "\n"

asm(
    ".globl _entry\n"
    ".type _entry,@function\n"
    "_entry:\n"

    ASMSTR(".intel_syntax noprefix")

    ASMSTR("mov rdi, [rsp];")
    ASMSTR("dec rdi;")
    ASMSTR("mov r15, rdi;")
    ASMSTR("test rdi, rdi;")
    ASMSTR("jne Y1;")
    ASMSTR("jmp B1;")
    ASMSTR(".byte 0x2f")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR("jmp A1;")
    ASMSTR("jmp Z1;")
    ASMSTR(".global Y1")
    ASMSTR("Y1:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X1];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A1];")
    ASMSTR(".global A1")
    ASMSTR("A1:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z1")
    ASMSTR("Z1:")
    ASMSTR("call A1;")
    ASMSTR(".global X1")
    ASMSTR("X1:")
    ASMSTR("jmp A1;")
    ASMSTR(".global B1")
    ASMSTR("B1:")



    ASMSTR("test r15, r15;")
    ASMSTR("jne Y2;")
    ASMSTR("jmp B2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR("jmp A2;")
    ASMSTR("jmp Z2;")
    ASMSTR(".global Y2")
    ASMSTR("Y2:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X2];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A2];")
    ASMSTR(".global A2")
    ASMSTR("A2:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z2")
    ASMSTR("Z2:")
    ASMSTR("call A2;")
    ASMSTR(".global X2")
    ASMSTR("X2:")
    ASMSTR("jmp A2;")
    ASMSTR(".global B2")
    ASMSTR("B2:")








    ASMSTR("test r15, r15;")
    ASMSTR("jne Y3;")
    ASMSTR("jmp B3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR("jmp A3;")
    ASMSTR("jmp Z3;")
    ASMSTR(".global Y3")
    ASMSTR("Y3:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X3];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A3];")
    ASMSTR(".global A3")
    ASMSTR("A3:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z3")
    ASMSTR("Z3:")
    ASMSTR("call A3;")
    ASMSTR(".global X3")
    ASMSTR("X3:")
    ASMSTR("jmp A3;")
    ASMSTR(".global B3")
    ASMSTR("B3:")





    ASMSTR("test r15, r15;")
    ASMSTR("jne Y4;")
    ASMSTR("jmp B4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR("jmp A4;")
    ASMSTR("jmp Z4;")
    ASMSTR(".global Y4")
    ASMSTR("Y4:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X4];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A4];")
    ASMSTR(".global A4")
    ASMSTR("A4:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z4")
    ASMSTR("Z4:")
    ASMSTR("call A4;")
    ASMSTR(".global X4")
    ASMSTR("X4:")
    ASMSTR("jmp A4;")
    ASMSTR(".global B4")
    ASMSTR("B4:")





    ASMSTR("test r15, r15;")
    ASMSTR("jne Y5;")
    ASMSTR("jmp B5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR("jmp A5;")
    ASMSTR("jmp Z5;")
    ASMSTR(".global Y5")
    ASMSTR("Y5:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X5];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A5];")
    ASMSTR(".global A5")
    ASMSTR("A5:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z5")
    ASMSTR("Z5:")
    ASMSTR("call A5;")
    ASMSTR(".global X5")
    ASMSTR("X5:")
    ASMSTR("jmp A5;")
    ASMSTR(".global B5")
    ASMSTR("B5:")





    ASMSTR("test r15, r15;")
    ASMSTR("jne Y6;")
    ASMSTR("jmp B6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR("jmp A6;")
    ASMSTR("jmp Z6;")
    ASMSTR(".global Y6")
    ASMSTR("Y6:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X6];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A6];")
    ASMSTR(".global A6")
    ASMSTR("A6:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z6")
    ASMSTR("Z6:")
    ASMSTR("call A6;")
    ASMSTR(".global X6")
    ASMSTR("X6:")
    ASMSTR("jmp A6;")
    ASMSTR(".global B6")
    ASMSTR("B6:")






    ASMSTR("test r15, r15;")
    ASMSTR("jne Y7;")
    ASMSTR("jmp B7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR("jmp A7;")
    ASMSTR("jmp Z7;")
    ASMSTR(".global Y7")
    ASMSTR("Y7:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X7];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A7];")
    ASMSTR(".global A7")
    ASMSTR("A7:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z7")
    ASMSTR("Z7:")
    ASMSTR("call A7;")
    ASMSTR(".global X7")
    ASMSTR("X7:")
    ASMSTR("jmp A7;")
    ASMSTR(".global B7")
    ASMSTR("B7:")





    ASMSTR("test r15, r15;")
    ASMSTR("jne Y8;")
    ASMSTR("jmp B8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR("jmp A8;")
    ASMSTR("jmp Z8;")
    ASMSTR(".global Y8")
    ASMSTR("Y8:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X8];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A8];")
    ASMSTR(".global A8")
    ASMSTR("A8:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z8")
    ASMSTR("Z8:")
    ASMSTR("call A8;")
    ASMSTR(".global X8")
    ASMSTR("X8:")
    ASMSTR("jmp A8;")
    ASMSTR(".global B8")
    ASMSTR("B8:")





    ASMSTR("test r15, r15;")
    ASMSTR("jne Y9;")
    ASMSTR("jmp B9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR("jmp A9;")
    ASMSTR("jmp Z9;")
    ASMSTR(".global Y9")
    ASMSTR("Y9:")
    ASMSTR("xor rbx, rbx")
    ASMSTR("mov bx, word ptr [X9];")
    ASMSTR("sub rbx, 0xf1dc;")
    ASMSTR("push rbx;")
    ASMSTR("lea r8, [rip + A9];")
    ASMSTR(".global A9")
    ASMSTR("A9:")
    ASMSTR("pop r9;")
    ASMSTR("add r8, r9;")
    ASMSTR("call r8;")
    ASMSTR(".global Z9")
    ASMSTR("Z9:")
    ASMSTR("call A9;")
    ASMSTR(".global X9")
    ASMSTR("X9:")
    ASMSTR("jmp A9;")
    ASMSTR(".global B9")
    ASMSTR("B9:")





    ASMSTR("mov rax, 60;")
    ASMSTR("mov rdi, 0;")
    ASMSTR("syscall;")


    ASMSTR("ret;")

    ASMSTR(".att_syntax;")
);
